package com.atguigu.gmall.product.service.impl;

import com.atguigu.gmall.product.entity.SkuAttrValue;
import com.atguigu.gmall.product.entity.SkuImage;
import com.atguigu.gmall.product.entity.SkuSaleAttrValue;
import com.atguigu.gmall.product.service.SkuAttrValueService;
import com.atguigu.gmall.product.service.SkuImageService;
import com.atguigu.gmall.product.service.SkuSaleAttrValueService;
import com.atguigu.gmall.product.vo.SkuInfoSaveVo;
import com.atguigu.gmall.product.vo.SpuInfoSaveVo;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.atguigu.gmall.product.entity.SkuInfo;
import com.atguigu.gmall.product.service.SkuInfoService;
import com.atguigu.gmall.product.mapper.SkuInfoMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @author ltystart
 * @description 针对表【sku_info(库存单元表)】的数据库操作Service实现
 * @createDate 2025-08-15 14:26:51
 */
@Slf4j
@Service
public class SkuInfoServiceImpl extends ServiceImpl<SkuInfoMapper, SkuInfo>
        implements SkuInfoService {
    @Autowired
    private SkuInfoMapper skuInfoMapper;

    @Autowired
    private SkuImageService skuImageService;

    @Autowired
    private SkuAttrValueService skuAttrValueService;

    @Autowired
    private SkuSaleAttrValueService skuSaleAttrValueService;

    /**
     * 保存SKU信息
     *
     * @param skuInfoSaveVo
     */
    @Override
    public void saveSkuInfo(SkuInfoSaveVo skuInfoSaveVo) {
        //1.保存sku_info
        SkuInfo skuInfo = new SkuInfo();
        BeanUtils.copyProperties(skuInfoSaveVo, skuInfo);
        skuInfoMapper.insert(skuInfo);
        Long id = skuInfo.getId();

        //2.保存sku_images
        List<SkuImage> imageList = skuInfoSaveVo.getSkuImageList()
                .stream().map(item -> {
                    SkuImage skuImage = new SkuImage();
                    BeanUtils.copyProperties(item, skuImage);
                    //回填sku_id
                    skuImage.setSkuId(id);
                    return skuImage;
                }).collect(Collectors.toList());
        skuImageService.saveBatch(imageList);

        //3.保存sku平台属性名和属性值
        List<SkuAttrValue> attrValueList = skuInfoSaveVo.getSkuAttrValueList()
                .stream().map(item -> {
                    SkuAttrValue skuAttrValue = new SkuAttrValue();
                    BeanUtils.copyProperties(item, skuAttrValue);
                    //回填sku_id
                    skuAttrValue.setSkuId(id);
                    return skuAttrValue;
                }).collect(Collectors.toList());
        skuAttrValueService.saveBatch(attrValueList);

        //4.保存sku销售属性名和属性值
        List<SkuSaleAttrValue> saleAttrValueList = skuInfoSaveVo.getSkuSaleAttrValueList()
                .stream().map(item -> {
                    SkuSaleAttrValue skuSaleAttrValue = new SkuSaleAttrValue();
                    BeanUtils.copyProperties(item, skuSaleAttrValue);
                    //回填sku_id
                    skuSaleAttrValue.setSkuId(id);
                    skuSaleAttrValue.setSpuId(skuInfo.getSpuId());
                    return skuSaleAttrValue;
                }).collect(Collectors.toList());
        skuSaleAttrValueService.saveBatch(saleAttrValueList);
        log.info("保存SKU信息成功！skuId={}", id);

    }

    /**
     * 修改商品上架状态
     *
     * @param skuId
     * @param status
     */
    @Override
    public void changeOnSale(Long skuId, int status) {
        skuInfoMapper.updateSaleStatus(skuId, status);
    }

    /**
     * 获取SKU价格
     * @param skuId
     * @return
     */
    @Override
    public BigDecimal getSkuPrice(Long skuId) {
        BigDecimal price = skuInfoMapper.getSkuPrice(skuId);
        return price;
    }

    /**
     * 获取所有SKUId
     * @return
     */
    @Override
    public List<Long> getAllSkuId() {
        return skuInfoMapper.getAllSkuId();
    }
}




